//Библиотека Qt.
#include <QtGui>


//Внутренняя библиотека.
#include "motionparamswidget.h"
#include "devmanager.h"


//===========================================================================//
//=Заголовок: MotionParamsWidget::MotionParamsWidget() - public
//=Параметры:
//=Описание: Конструктор.
//===========================================================================//
MotionParamsWidget::MotionParamsWidget(DevManager *devmanager, QWidget *parent) : QWidget(parent)
{
devManager = devmanager;
//connect(devManager, SIGNAL(devicesSelected()), this, SLOT(slotLoadParams()));

//Получить параметры ДД.
QVariant enabled, treshold, sensitive, noise;
/*vidDev->getParam(DevParam::GET_MOTION_ENABLED, &enabled);
vidDev->getParam(DevParam::GET_MOTION_TRESHOLD, &treshold);
vidDev->getParam(DevParam::GET_MOTION_SENSITIVE, &sensitive);
vidDev->getParam(DevParam::GET_MOTION_NOISEREMOVING, &noise);*/

//Создать виджеты управления активностью ДД.
enabledChkBox = new QCheckBox(this);
enabledChkBox->setChecked(enabled.toBool());
if(enabled.toBool()) enabledChkBox->setText(tr("детектор движения включен"));
else enabledChkBox->setText(tr("детектор движения выключен"));
connect(enabledChkBox, SIGNAL(stateChanged(int)), this, SLOT(slotMotionEnabled(int)));

//Создать менеджер размещения.
QVBoxLayout *tresholdlayout = new QVBoxLayout();
tresholdlayout->setMargin(2); tresholdlayout->setSpacing(2);

//Создать виджеты смены порога срабатывания ДД.
QString treshold_msg;
if(treshold.toInt() > 0) treshold_msg = tr("порог срабатывания: ") + QString::number(treshold.toInt());
else treshold_msg = tr("порог срабатывания: адаптивный");
tresholdLabel = new QLabel(treshold_msg, this);
QSlider *tresholdslider = new QSlider(Qt::Horizontal, this);
tresholdslider->setRange(0, 100);
tresholdslider->setSingleStep(1);
tresholdslider->setValue(treshold.toInt());
connect(tresholdslider, SIGNAL(valueChanged(int)), this, SLOT(slotTresholdChanged(int)));
tresholdlayout->addWidget(tresholdLabel);
tresholdlayout->addWidget(tresholdslider);

//Создать менеджер размещения.
QVBoxLayout *sensitivelayout = new QVBoxLayout();
sensitivelayout->setMargin(2); sensitivelayout->setSpacing(2);

//Создать виджеты смены чувствительности ДД.
sensitiveLabel = new QLabel(tr("толерантность: ") + QString::number(sensitive.toInt()), this);
QSlider *sensitiveslider = new QSlider(Qt::Horizontal, this);
sensitiveslider->setRange(1, 100);
sensitiveslider->setSingleStep(1);
sensitiveslider->setValue(sensitive.toInt());
connect(sensitiveslider, SIGNAL(valueChanged(int)), this, SLOT(slotSensitiveChanged(int)));
sensitivelayout->addWidget(sensitiveLabel);
sensitivelayout->addWidget(sensitiveslider);

//Создать виджеты управления шумоподавлением.
QCheckBox *noisechkbox = new QCheckBox(tr("шумоподавление"), this);
noisechkbox->setChecked(noise.toBool());
connect(noisechkbox, SIGNAL(stateChanged(int)), this, SLOT(slotNoiseRemoving(int)));

//Создать менеджер размещения.
QVBoxLayout *motionlayout = new QVBoxLayout();
motionlayout->setMargin(2); motionlayout->setSpacing(2);

//Создать виджеты фиксации движения.
motionLabel = new QLabel(this);
if(enabled.toBool()) motionLabel->setText(tr("движение зафиксировано: НЕТ"));
else motionLabel->setText(tr("информация о движении отсутствует"));
motionlayout->addWidget(motionLabel);

//Создать менеджер размещения.
QHBoxLayout *butlayout = new QHBoxLayout();
butlayout->setMargin(5); butlayout->setSpacing(5);

//Создать кнопку.
QPushButton *closebut = new QPushButton(tr("Закрыть"), this);
connect(closebut, SIGNAL(clicked()), this, SLOT(close()));
butlayout->addStretch(1);
butlayout->addWidget(closebut);
butlayout->addStretch(1);

//Создать главный менеджер размещения.
QVBoxLayout *mainlayout = new QVBoxLayout(this);
mainlayout->setMargin(5); mainlayout->setSpacing(5);
mainlayout->addWidget(enabledChkBox);
mainlayout->addStretch(1);
mainlayout->addLayout(tresholdlayout);
mainlayout->addStretch(1);
mainlayout->addLayout(sensitivelayout);
mainlayout->addStretch(1);
mainlayout->addWidget(noisechkbox);
mainlayout->addStretch(1);
mainlayout->addLayout(motionlayout);
mainlayout->addStretch(2);
mainlayout->addLayout(butlayout);
}


//===========================================================================//
//=Заголовок: void MotionParamsWidget::closeEvent() - protected
//=Параметры:
//=Описание: Событие закрытия дмалогового окна.
//===========================================================================//
void MotionParamsWidget::closeEvent(QCloseEvent *event)
{
/*if(enabledChkBox->isChecked())
	emit setParam(DevParam::SET_MOTION_TEST_ENABLED, false);*/

event->accept();
}


//===========================================================================//
//=Заголовок: void MotionParamsWidget::slotMotionEnabled() - private slots
//=Параметры:
//=Описание: Слот смены активности ДД.
//===========================================================================//
void MotionParamsWidget::slotMotionEnabled(int state)
{
switch(state)
	{
	case Qt::PartiallyChecked: return;
	case Qt::Unchecked:
		//emit setParam(DevParam::SET_MOTION_ENABLED, false);
		enabledChkBox->setText(tr("детектор движения выключен"));
		motionLabel->setText(tr("информация о движении отсутствует"));
	break;
	case Qt::Checked:
		//emit setParam(DevParam::SET_MOTION_TEST_ENABLED, true);
		//emit setParam(DevParam::SET_MOTION_ENABLED, true);
		enabledChkBox->setText(tr("детектор движения включен"));
	break;
}
}


//===========================================================================//
//=Заголовок: void MotionParamsWidget::slotTresholdChanged() - private slots
//=Параметры:
//=Описание: Слот смены порога срабатывания ДД.
//===========================================================================//
void MotionParamsWidget::slotTresholdChanged(int value)
{
//emit setParam(DevParam::SET_MOTION_TRESHOLD, value);
QString treshold_msg;
if(value > 0) treshold_msg = tr("порог срабатывания: ") + QString::number(value);
else treshold_msg = tr("порог срабатывания: адаптивный");
tresholdLabel->setText(treshold_msg);
}


//===========================================================================//
//=Заголовок: void MotionParamsWidget::slotSensitiveChanged() - private slots
//=Параметры:
//=Описание: Слот смены чувствительности ДД.
//===========================================================================//
void MotionParamsWidget::slotSensitiveChanged(int value)
{
//emit setParam(DevParam::SET_MOTION_SENSITIVE, value);
sensitiveLabel->setText(tr("толерантность: ") + QString::number(value));
}


//===========================================================================//
//=Заголовок: void MotionParamsWidget::slotNoiseRemoving() - private slots
//=Параметры:
//=Описание: Слот смены состояния параметра шумоподавления.
//===========================================================================//
void MotionParamsWidget::slotNoiseRemoving(int noise)
{
switch(noise)
	{
	case Qt::PartiallyChecked: return;
	case Qt::Unchecked:
		//emit setParam(DevParam::SET_MOTION_NOISEREMOVING, false);
	break;
	case Qt::Checked:
		//emit setParam(DevParam::SET_MOTION_NOISEREMOVING, true);
	break;
}
}


//===========================================================================//
//=Заголовок: void MotionParamsWidget::slotAchievedTreshold() - private slots
//=Параметры:
//=Описание: Слот определения фиксации движения.
//===========================================================================//
void MotionParamsWidget::slotAchievedTreshold(bool achieved)
{
if(!enabledChkBox->isChecked()) return;

QString msg = tr("движение зафиксировано: ");
if(achieved) msg += tr("ДА");
else msg += tr("НЕТ");
motionLabel->setText(msg);
}
